package it.controllocredito.backend.persistence.tables;

import it.controllocredito.backend.persistence.bean.RegistroChiamate;

import java.sql.Time;
import java.util.Calendar;

import android.content.ContentValues;
import android.database.Cursor;
import android.util.Log;

public abstract class RegistroChiamateTable
{
	
	private static final String	log_class_name	= "RegistroChiamateTable";
	
	private static final String	TABLE_NAME		= "REGISTRO_CHIAMATE";
	
	// colonne del db NOME_COLONNA_DB("nome_variabile",numero_colonna_db)
	public enum Columns
	{
		REGISTRO_CHIAMATE_ID("registroChiamateId", 0), ANNO("anno", 1), MESE(
				"mese", 2), GIORNO("giorno", 3), GIORNO_SETTIMANA(
				"giornoSettimana", 4), ORA("ora", 5), TIPO("tipo", 6), DURATA(
				"durata", 7), PREFISSO_TEL("prefissoTel", 8), NUMERO_TEL(
				"numeroTel", 9);
		
		String	name;
		int		num;
		
		private Columns(String name, int num)
		{
			this.name = name;
			this.num = num;
		}
	};
	
	public static String getName()
	{
		return TABLE_NAME;
	}
	
	// metodo per ottenere la query di creazione della tablla
	public static String getCreateQuery()
	{
		Log.d(log_class_name, "sto facendo getCreateQuery");
		System.out.println("Sto facendo createRecord");
		String createQuery = "CREATE TABLE IF NOT EXISTS "
				+ RegistroChiamateTable.TABLE_NAME + " ("
				+ Columns.REGISTRO_CHIAMATE_ID.toString()
				+ " integer primary key autoincrement, "
				+ Columns.ANNO.toString() + " integer not null, "
				+ Columns.MESE.toString() + " integer not null, "
				+ Columns.GIORNO.toString() + " integer not null, "
				+ Columns.GIORNO_SETTIMANA.toString() + " integer not null, "
				+ Columns.ORA.toString() + " TIME not null, "
				+ Columns.TIPO.toString() + " integer not null,"
				+ Columns.DURATA.toString() + " bigint not null,"
				+ Columns.PREFISSO_TEL.toString() + " varchar(8) not null,"
				+ Columns.NUMERO_TEL.toString() + " varchar(20) not null);";
		Log.d(log_class_name, "createQuery:" + createQuery);
		return createQuery;
	}
	
	// crea una nuova riga sul db con tutti i campi
	public static ContentValues createRecord(int anno, int mese, int giorno,
			int giornoSettimana, java.sql.Time ora, int tipo, long durata,
			String prefissoTel, String numeroTel)
	{
		Log.d(log_class_name, "sto facendo contentValues");
		System.out.println("Sto facendo createRecord");
		ContentValues cv = new ContentValues();
		cv.put(Columns.ANNO.toString(), anno);
		cv.put(Columns.MESE.toString(), mese);
		cv.put(Columns.GIORNO.toString(), giorno);
		cv.put(Columns.GIORNO_SETTIMANA.toString(), giornoSettimana);
		cv.put(Columns.ORA.toString(), ora.toString());
		cv.put(Columns.TIPO.toString(), tipo);
		cv.put(Columns.DURATA.toString(), durata);
		cv.put(Columns.PREFISSO_TEL.toString(), prefissoTel);
		cv.put(Columns.NUMERO_TEL.toString(), numeroTel);
		return cv;
	}
	
	// crea una nuova riga del db alla data di oggi
	public static ContentValues createRecord(int tipo, long durata,
			String prefissoTel, String numeroTel)
	{ // metodo per inserire i dati
		Log.d(log_class_name, "sto facendo createRecord");
		System.out.println("Sto facendo createRecord");
		ContentValues cv = new ContentValues();
		Calendar c = Calendar.getInstance();
		
		cv.put(Columns.ANNO.toString(), c.get(Calendar.YEAR));
		cv.put(Columns.MESE.toString(), c.get(Calendar.MONTH) + 1);
		cv.put(Columns.GIORNO.toString(), c.get(Calendar.DAY_OF_MONTH));
		cv.put(Columns.GIORNO_SETTIMANA.toString(), c.get(Calendar.DAY_OF_WEEK));
		cv.put(Columns.ORA.toString(),
				new java.sql.Time(System.currentTimeMillis()).toString());
		cv.put(Columns.TIPO.toString(), tipo);
		cv.put(Columns.DURATA.toString(), durata);
		cv.put(Columns.PREFISSO_TEL.toString(), prefissoTel);
		cv.put(Columns.NUMERO_TEL.toString(), numeroTel);
		return cv;
	}
	
	public static String getKeyColumn()
	{
		Log.d(log_class_name, "sto facendo ketColumns");
		System.out.println("Sto facendo createRecord");
		return Columns.REGISTRO_CHIAMATE_ID.toString();
	}
	
	public static String[] getColumns()
	{
		Log.d(log_class_name, "sto facendo getColumns");
		System.out.println("Sto facendo createRecord");
		String[] arrayTableColumns =
		{ Columns.ANNO.toString(), Columns.MESE.toString(),
				Columns.GIORNO.toString(), Columns.GIORNO_SETTIMANA.toString(),
				Columns.ORA.toString(), Columns.TIPO.toString(),
				Columns.DURATA.toString(), Columns.PREFISSO_TEL.toString(),
				Columns.NUMERO_TEL.toString() };
		return arrayTableColumns;
	}
	
	public static RegistroChiamate getRecord(Cursor cursor)
	{
		RegistroChiamate registroChiamate = new RegistroChiamate();
		registroChiamate.setRegistroChiamateId(Integer.parseInt(cursor
				.getString(Columns.REGISTRO_CHIAMATE_ID.num)));
		registroChiamate.setAnno(Integer.parseInt(cursor
				.getString(Columns.ANNO.num)));
		registroChiamate.setMese(Integer.parseInt(cursor
				.getString(Columns.MESE.num)));
		registroChiamate.setGiorno(Integer.parseInt(cursor
				.getString(Columns.GIORNO.num)));
		registroChiamate.setGiornoSettimana(Integer.parseInt(cursor
				.getString(Columns.GIORNO_SETTIMANA.num)));
		registroChiamate
				.setOra(Time.valueOf(cursor.getString(Columns.ORA.num)));
		registroChiamate.setTipo(Integer.parseInt(cursor
				.getString(Columns.TIPO.num)));
		registroChiamate.setDurata(Integer.parseInt(cursor
				.getString(Columns.DURATA.num)));
		registroChiamate.setPrefissoTel(cursor
				.getString(Columns.PREFISSO_TEL.num));
		registroChiamate.setNumeroTel(cursor.getString(Columns.NUMERO_TEL.num));
		
		Log.d(log_class_name, "[" + registroChiamate.getRegistroChiamateId()
				+ "] registroChiamate: Tipo:" + registroChiamate.getTipo()
				+ ", Durata:" + registroChiamate.getDurata()
				+ ", Prefisso Tel:" + registroChiamate.getPrefissoTel()
				+ " ms, NumeroTel:" + registroChiamate.getNumeroTel());
		Log.d(log_class_name, "[" + registroChiamate.getRegistroChiamateId()
				+ "] registroChiamate: " + registroChiamate.getGiorno() + "/"
				+ registroChiamate.getMese() + "/" + registroChiamate.getAnno()
				+ " - " + registroChiamate.getOra().toString() + ".");
		Log.d(log_class_name, "[" + registroChiamate.getRegistroChiamateId()
				+ "] registroChiamate: Tipo:" + registroChiamate.getTipo()
				+ ", Durata:" + registroChiamate.getDurata()
				+ ", Prefisso Tel:" + registroChiamate.getPrefissoTel()
				+ " ms, NumeroTel:" + registroChiamate.getNumeroTel());
		return registroChiamate;
	}
	
}